沒有UI
coordinate //座標
var coordinate: CLLocationCoordinate2D { get }
struct CLLocationCoordinate2D {
CLLocationDegree latitude
CLLocationDegree longitude
}
altitude //海拔
var altitude: CLLocationDistance { get }
horizontal/verticalAccuracy //定位精準度
透過gps , wify ,cellular
越精準越耗電~
timestamp //確定此位置的時機
var timestamp: Date { get }
speed //設備的移動速度
var speed: CLLocationSpeed { get }
course //設備行進的方向
var course: CLLocationDirection { get }
透過CLLocationManager
1.檢查裝置可否使用
2.實例化CLLocationManager設定delegate來接收update
3.配置manager根據你想要什麼location update
4.開始監聽location的改變
Accuracy - based continual update
Update when significant changes in location occur
Region - based update
Heading monitoring
回傳應用的使用位置服務的授權狀態
要在 info.plist 設定詢問權限時的entry
NSLocationWhenInUseUsageDescription 或 NSLocationAlwaysUsageDescription
定位的目的前者使用者使用期間後者Always
class func authorizationStatus() -> CLAuthorizationStatus
如果authorizationStatus是kCLAuthorizationStatusNotDetermined
則可以呼叫
func requestWhenInUseAuthorization()
func requestAlwaysAuthorization()
從使用者請求適當類型的授權。
回傳有沒有開啟GPS服務
class func locationServicesEnabled() -> Bool
判斷設備是否支持更新位置信息
class func significantLocationChangeMonitoringAvailable() -> Bool
判斷設備是否支持區域檢測
class func isMonitoringAvailable(for regionClass: AnyClass) -> Bool
desireAccuracy
決定要多精準
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
distanceFilter
多少距離才會委託更新
locationManager.distanceFilter = 1000.0f;
然後呼叫StartUpdatingLocation()
func startUpdatingLocation()
透過Delegate獲取通知
optional func locationManager(_ manager: CLLocationManager,
didUpdateLocations locations: [CLLocation])
MKMapView 展示出地圖
地圖上可以有Annotations在上面
每個Annotation 是個coordinate ,tittle , subtittle
improt MapKit
let mpV=MKMapView()
或是直接從storyboard上拉
annotations : [MKAnnotation] {get}
MKAnnotation 是個 protocol
由於annotations是readOnly必須透過這些方法
func addAnnotation(MKAnnotation)
func addAnnotations([MKAnnotation])
func removeAnnotation(MKAnnotation)
func removeAnnotations([MKAnnotation])
System會像tableView一樣reuse pin
pin可以被reuse
defalt預設是 MKPinAnnotationView
你可以subclass或設定屬性去調整他的樣子
點選他的會得到一個callout(view就跳出來)
這個callout只有在canShowCallOut是true時會出現
跟UITableViewCell很像
插入MKMapviewDeegate method
optional func mapView(_ mapView: MKMapView,
viewFor annotation: MKAnnotation) -> MKAnnotationView?
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) ->MKAnnotationView? {
var view = mapView.dequeueReusableAnnotationView(withIdentifier: "")
if view == nil {
view = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "")
view?.canShowCallout = true
}
view?.annotation = annotation
return view
}